package com.top75;

/**
 * @Author: huangzhigao
 * @Date: 2023/5/14 19:50
 * 给你一个二进制数组 nums ，你需要从中删掉一个元素。
 * <p>
 * 请你在删掉元素的结果数组中，返回最长的且只包含 1 的非空子数组的长度。
 * <p>
 * 如果不存在这样的子数组，请返回 0
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/longest-subarray-of-1s-after-deleting-one-element
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Code1493 {
    public int longestSubarray(int[] nums) {
        int left = 0;
        int right = 0;
        int res = 0;
        int notOne = 0;

        //窗口内只存在一个非1的数，否则左边界不断往右移动
        while (right < nums.length) {
            if (nums[right] != 1) {
                notOne++;
            }
            while (notOne > 1) {
                if (nums[left++] != 1) {
                    notOne--;
                }
            }
            res = Math.max(res, right - left );
            right++;
        }
        return res;
    }
}
